package com.mlh.service.impl;

public class Outer {
    public static void main(String[] args) {
        Outer o1=new Outer();
        Outer o2=new Outer();
        o1.test2();
        System.out.println("o1--hashcode="+o1);
        System.out.println("o2--hashcode="+o2);
    }
    private int n1=90;
    private int outer_private_num=9999;
    private void test1(){
        System.out.println("Outer的test1方法");
    }

    public void test2(){
        //1.局部内部类是定义在外部类的局部位置,通常在方法
        //3.不能添加访问修饰符,但是可以使用 final 修饰,这边指的是内部类的类修饰符
        //4.作用域 : 仅仅在定义它的方法或代码块中
          class Inner{
            private int n1=800;
            public int n2=999;

            private void f1(){
                //2.可以直接访问外部类的所有成员，包含私有的
                System.out.println("outer_private_num="+outer_private_num);
                //7. 如果外部类和局部内部类的成员重名时，默认遵循就近原则，
                // 如果想访问外部类的成员,使用  外部类名.this.成员  去访问
                System.out.println("Outer.this.n1="+Outer.this.n1);
                System.out.println("n1="+n1);
                // 老韩解读 Outer02.this 本质就是外部类的对象,
                // 即哪个对象调用了test2方法, 这里的Outer02.this 就是哪个对象
                System.out.println("Outer.this="+Outer.this);
            }
        }
        //6. 外部类在方法中，可以创建 Inner对象，然后调用方法即可
        Inner i1=new Inner();
          i1.f1();
          //在这个方法中，创建了内部类对象，同样可以访问这个内部类中的私有成员
        System.out.println("i1.n1="+i1.n1);

    }
}
